package doc2db.DbManager;

import doc2db.Keey;
import java.util.ArrayList;
import java.util.List;

import doc2db.table.DocTable;
import doc2db.table.DocTableHead;

/**
 *  Клас внесения таблиц в БД по заданным запросам
 * @author yuriy
 */
public class TablesOutput {

    private List<DocTable> tables = new ArrayList<DocTable>();
    private DBManager db;
    private StringBuffer selects = new StringBuffer();

    /**
     *  <p><b>Конструктор</b></p>
     * @param tables <p>таблица для занесения в БД</p>
     * @param db <p>БД работник</p>
     */
    public TablesOutput(List<DocTable> tables, DBManager db) {
        this.tables = tables;
        this.db = db;
    }

    /**
     *  <p>создать таблици в БД с задаными именами, и необходимым
     * количеством полей</p>
     * @param fileName <p>часть имени</p>
     */
    public void createDBTables(String fileName) {
        int i = 0;
        db.begin();
        for (DocTable tb : tables) {
            String s = tb.getHeadSQLString(fileName, ++i);
            db.sql(s, false);
            if (Keey.debug) {
                //System.out.println("SQL:" + s );
                selects.append("\n").append(s);
            }
        }
        db.commit();
    }

    /**
     *  <p>Удалить таблицу из БД часть имени которой заданна</p>
     * @param fileName <p>заданная часть имени</p>
     */
    public void dropDBTables(String fileName) {
        int i = 0;
        db.begin();
        for (DocTable tb : tables) {
            String s = tb.getDropSQLString(fileName, ++i);
            db.sql(s, false);
            if (Keey.debug) {
                //System.out.println("SQL:" + s );
                selects.append("\n").append(s);
            }
        }
        db.commit();
    }

    /**
     *  <p>Заполнить значениями созданые таблици</p>
     */
    public void insertValues() {
        int i = 0;
        db.begin();
        for (DocTable tb : tables) {
            String[] s = tb.getBodySQLString();
            for (int k = 1; k < s.length; k++) {
                db.sql(s[k], true);
                if (Keey.debug) {
                    //System.out.println(" " + s[k] );
                    selects.append("\n").append(s[k]);
                }
            }
        }
        db.commit();
    }

    public String getTableName() {
        return tables.get(tables.size() - 1).getTableName();
    }

    public String getSelects() {
        return selects.toString();
    }

    public DocTableHead getHead(int i) {
        return tables.get(i).getHead();
    }

    ;
}
